/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Class Tree
*/

function Tree(baseUrl,module,controller){
	this.module = module;
	this.baseUrl = baseUrl;
	this.controller = controller;
	this.urlPath = baseUrl + '/' + module + '/' + controller;//Biên public lưu tên module
	myClass = this;
	/*
		Ẩn modal thông báo "Đang xử lý dũ liệu" khi form load xong
	*/
	this.successLoad = function(){
		//Ẩn thông báo
		$('div#note-process').removeClass('vY nq');
		$('div#note-process').hide();
		$('div#process').hide();
	};
	//hiển thị image thể hiện trạng thái đang xử lý dữ liệu khi NSD nhấn vào nút "Tìm kiếm"
	this.statusSearch = function(){
		$('img#isearching').hide();
	}
	//Ẩn image thể hiện trạng thái đang xử lý dữ liệu khi NSD nhấn vào nút "Tìm kiếm"
	this.successSearch = function(){
		$('img#isearching').hide();	
	}
}
//Remove key
Tree.prototype.removekey = function(key){
	shortcut.remove(key);
}

//Quay lại
Tree.prototype.back = function(key){
	$('form#frmAddTraining').hide();
	$('form#frmEditTraining').hide();
	$('form#Trainingfrm').show();
	// this.loadTree();
}
Tree.prototype.loadTreefrm = function(){
	$(".chzn-select").chosen();
	myTree.genTree();	
	//Khi ấn thêm
	$('.add').click(function(){
		myTree.addtraining($(this));
	})
	//Khi ấn xóa
	$('.delete').click(function(){
		myTree.delete();	
	})
	//Khi ấn sửa
	$('.edittree').dblclick(function(){
		myTree.edittraining($(this));	
	})
	$('.edit').click(function(){
		myTree.edittraining($(this));	
	})
	//Khi Ctrl+K
	shortcut.add("Ctrl+K",function() {
		document.getElementById('searchNodes').focus();
		document.getElementById('searchNodes').select();
	});	
	shortcut.add("Enter",function() {
		myTree.adv_search($('#searchNodebtn').attr('load'));
	});
	// Khi ấn tìm kiếm
	$('.clsearch').click(function(){
		myTree.adv_search($('#searchNodebtn').attr('load'));
	})

	// document.onkeydown =function(e){
	// 	if(e.which == 13){
	// 		myTree.adv_search($('#searchNodebtn').attr('load'));
	// 	}
	// }

}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Phương thức tao tree bang json_data
*/
Tree.prototype.genTree = function(){
	var url = this.urlPath + '/loadtree';
	obj = $("#TrainingTree");
	obj.jstree({ 
		"plugins" : [ 
			"themes","json_data","ui","crrm","dnd","search","types","hotkeys","checkbox","adv_search","contextmenu","cookies"
		],
		"json_data" : { 
			"ajax" : {
				"url" : url,
				"cache":true,
				"data" : function (n) { 
					return { 
						"operation" : "get_children", 
						"id" : n.attr ? n.attr("id").replace("node_","") : '',
						"sType":$('#sType').val(),
					};

				},
				"success": function(data){
					
				}
			}
		},
		contextmenu: {items: customMenu},
	 	"themes" : {
	            "theme" : "default",
	            "dots" : false,
	            "icons" : true,
	            "url": baseUrl + '/public/efy-js/jsTree/themes/default/style.css'
	    		},
	})
	.bind('check_node.jstree', function (e, data) {
            var idCheckboxs = data.rslt.obj.attr("id");
            var listID =  $('#idCheckboxs').val();
            listID += data.rslt.obj.attr("id") + ',';
            $('#idCheckboxs').val(listID);
        })
	.bind('uncheck_node.jstree', function (e, data) {
		var listID =  $('#idCheckboxs').val();
		listID = listID.replace(data.rslt.obj.attr("id") + ',', '' );
        $('#idCheckboxs').val(listID);
    })
	.bind("select_node.jstree", function (event, data) { 
			$('#selectValueTrainingTree').val(data.rslt.obj.attr("id"));
			objcurent = data.rslt.obj;
			// objParent = data.inst._get_parent(data.rslt.obj);
			//get NodeName
			// alert(data.inst.get_text(data.rslt.obj));
			objNode = data.inst._get_node(data.rslt.obj.attr("id"));
			resulter = data.inst._get_node(data.rslt.obj);
            obj.jstree("toggle_node", data.rslt.obj);  
		})
	.delegate("a.jstree-clicked", "click", function (event, data) { 
			event.preventDefault(); 
		})
	.delegate("a","dblclick", function(e) { 
			var idn = $(this).parent().attr("id");
			$('input.demo').click(function(){
				myTree.edit();
			});
		});
}
/*
* Author: Tuanpm
* Date:03/01/2013
* Idea: Tao contextmenu cho tree
*/
function customMenu(node) {
	var items = {
		createItem: {
			label: "Thêm",
			action: function (){
				myTree.addtraining($(this));
			}
		},	
		renameItem: { 
			label: "Sửa",
			action: function () {
				myTree.edittraining($(this));
			}
		},
		deleteItem: { 
			label: "Xóa",
			action: function () {
				myTree.delete();	
			}
		},
		// EditItem: { 
		// 	label: "Edit",
		// 	action: function () {
		// 		myTree.delete();	
		// 	},
		// 	 "submenu" : {
  //                           "create_service_group" : {
  //                               "label" : "Service Group",
  //                               action : function(obj){
  //                                   $.jstree._reference("#TrainingTree").set_type("service_group",this.create(obj));
  //                               }
  //                           },
  //                           "create_service" : {
  //                               "label" : "Service",
  //                               action : function(obj){
  //                                   $.jstree._reference("#TrainingTree").set_type("service",this.create(obj));
  //                               }
  //                           }
  //                       }
		// }
	};

	if ($(node).hasClass("folder")) {
	// Delete the "delete" menu item
	delete items.deleteItem;
	}

	return items;
}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Phương thức thêm mới 
*/
Tree.prototype.addtraining = function(obj){
	var act = obj.attr('action');
	var sType = $('#sType').val();
	// alert(action);return false;
	if(!$('#selectValueTrainingTree').val()){
		jAlert('Bạn phải xác định đối tượng!', 'Add Dialog');
		return false;
	}else{
		var url = this.urlPath + '/addtraining';
		var data = {
			selectValueTrainingTree: $('#selectValueTrainingTree').val()
			,act : act
			,sType : sType
		};
		statusProcess();
		$.ajax({
			url: url,
			type: "POST",
			data: data,
			//cache: true,
			//dataType: "json",		
			success: function(string){
				var currentState = { content: string};				
				$('div#load_training_form form#Trainingfrm').hide();//Ẩn dữ liệu màn hình danh sách
				$('div#load_data_form_training_update').html(string);//Fill dũ liệu vào thẻ div có id='load_data_form_update'
				// jQuery('form#updatefrm').show();//Hiển thị form nhập dữ liệu theo loại hồ sơ
				//if (history.pushState) history.pushState(currentState, "", url);
				myClass.loadAddAndEditfrm();
				myClass.removekey('Enter');
				successProcess();
				// fixInformation();
			}
		});	
		 return !history.pushState; // ngăn việc chuyển trang thực sự nếu trình duyệt có hỗ trợ pushState
	}
}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Load cac action cho form khi them va sua
*/
Tree.prototype.loadAddAndEditfrm = function(){	
	//Tao modal dialog
	$( "#dialog" ).dialog({
		autoOpen: false,					
        modal: true,
        resizable: true,
        width:800,
        height:600,
        autoResize: false,      
        dialogClass:'dialog-class',        
        draggable:true,
        buttons: [
		    {
		        text: "Đóng",
		        click: function() { $(this).dialog("close"); }
		    }
		]
	});
	//Back
	$('input.clback').click(function(){
		myTree.back();
	});
	//Save
	$('input.clsave').click(function(){
		myTree.save($(this));
	});
	//Khi an vao img link de chon phong ban
	$('.imgGetDep').click(function(){
		myTree.getDep();
	})
	$("#ajax_staff").hide();
	$('input[name="TRPer"]').click(function(){				
		$("#ajax_staff").hide();
		var CheckReceiveStaffval =$('input[name="TRPer"]:checked').val();		
		if(CheckReceiveStaffval == '1'){
			$("#ajax_staff").show();
			$.post("../ajaxstaff/",function(data){
				// alert(data);
				$("#ajax_staff").html(data);
			});
		}		
		return true;
	});

}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Mo dialog 
*/
Tree.prototype.getDep = function(){
	myTree.genTreeAdd($('#treeDialog'));
	$( "#dialog" ).dialog("open");
}
Tree.prototype.genTreeAdd = function(obj){	
	var url = this.urlPath + '/loadtree';	
	obj.jstree({ "plugins" : ["themes","json_data","ui","crrm","dnd","search","types","hotkeys"],
			"json_data" : { 
				"ajax" : {
					"url" : url,
					"data" : function (n) { 
						return { 
							"operation" : "get_children", 
							"id" : n.attr ? n.attr("id").replace("node_","") : '',
							"sType":$('#sType').val(),
						}; 
					}
				}
			},
			 "search" : {
	            "ajax" : {
	                "url" : url,
	                "data" : function (str) {
	                    return {
	                        "operation" : "search",
	                        "search_str" : str
	                    };
	                }
	            }
	        },
			"themes" : {
	            "theme" : "default",
	            "dots" : false,
	            "icons" : true,
	            "url": baseUrl + '/public/efy-js/jsTree/themes/default/style.css'
	    		},
		})
		.bind("select_node.jstree", function (event, data) { 
			$('#selectValueTreeImg').val(data.rslt.obj.attr("id"));
			resulter = data.inst.get_text(data.rslt.obj);
			$('form#frmAddTraining input#TR02').val(resulter);
			obj.jstree("toggle_node", data.rslt.obj);

		})
		.delegate("a", "click", function (event, data) { 
			event.preventDefault(); })     
		.delegate("a","dblclick", function(e) {
			$( "#dialog" ).dialog("close");
		});

}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Save 
*/
Tree.prototype.save = function(obj){
	if (!$('input[name="TRPer"]:checked').val())
	{
		jAlert('Bạn phải xác định quyền thực hiện!', 'Add Dialog');
		return false;
	}
	$('#action').val($(obj).attr('action'));
	var p_checkbox_obj = document.getElementsByName('chk_staff_id');
	v_value_list = checkbox_value_to_list(p_checkbox_obj,",");
	var url = this.urlPath + '/savetraining';
	var urlUpdate = this.urlPath + '/addtraining';
	if(verify(document.forms[1])){
		var data = "&v_value_list="+v_value_list +'&'+ $("form#frmAddTraining").serialize();
		statusProcess('Hệ thống đang cập nhật dữ liệu');
		$.ajax({
			url: url,
			type: "POST",
			data: data,
			// cache: true,
			success: function(string){
				if($('#hdn_action').val() ==1){
					$("#TrainingTree").jstree("rename_node", objcurent, $('#TR04').val());  
				}else{
					  $("#TrainingTree").jstree("refresh");
				}
				switch(string){
				case "next":
					$("div#load_training_form").load(urlUpdate,data,function(){
						successProcess();
					});
					break;
				case "back":
					myClass.back();
					successProcess();
					break;
				default:
					myClass.back();
					successProcess();	
				}
			},
			error: function (){
				jAlert('Có lỗi xảy ra', 'Error Dialog');
			}
		});			
	}

}
/*
* Author: Tuanpm
* Date:27/12/2012
* Idea: Phương thức sửa
*/
Tree.prototype.edittraining = function(obj){
	if(obj.attr('action'))
		var act = obj.attr('action');
	else var act = 1;
	if($('#selectValueTrainingTree').val() == '') 
	{
		jAlert('Bạn chưa chọn đối tượng nào để sửa!', 'Edit Dialog');
		return false;
	}
	var url = this.urlPath + '/addtraining';
	//Sửa
	var data = {selectValueTrainingTree: $('#selectValueTrainingTree').val()
				,act:act
				,sType:$('#sType').val()};

	statusProcess();
    $.ajax({
		url: url,
		type: "POST",
		data: data,
		//cache: true,		
		success: function(string){
			$('div#load_training_form form#Trainingfrm').hide();
			$('div#load_data_form_training_update').html(string);	
			$('form#frmAddTraining').show();
			myClass.removekey('Enter');
			successProcess();
			var currentState = {html: string};
			// nếu trình duyệt hỗ trợ thì lưu lại trạng thái hiện tại và chuyển url
			// if (history.pushState) history.pushState(currentState, currentState, url);
			//Create evens
			myClass.loadAddAndEditfrm();
			// fixInformation();
		}
	});	

}
/*
* Author: Tuanpm
* Date:28/12/2012
* Idea: Phương thức xóa
*/
Tree.prototype.delete=function(){
	var ListId = $('#idCheckboxs').val();
	if (ListId == '')
		ListId = $('#selectValueTrainingTree').val();
	if (ListId == ''){
		jAlert('Bạn chưa chọn đối tượng nào để xóa!', 'Delete Dialog');
		return false;
	}
	var obj = objcurent;
	var url = this.urlPath + '/deletetraining';
	jConfirm('Bạn có chắc chắn muốn xóa đối tượng này?', 'Delete Dialog', function(r) {
	    if(r){
			var arrdata = {ListId : ListId,sType: $('#sType').val()
								};
			$.ajax({
				url: url,
				type: "POST",
				data: arrdata,
				// cache: true,		
				success: function(string){
					var str = 'Khong the xoa duoc doi tuong da chon vi co chua doi tuong khac';
					var str1 = 'Khong the xoa duoc doi tuong da chon vi co chua bai giang';
					var n=string.indexOf(str);
					var m=string.indexOf(str1);
					if (n > 0){
						jAlert('Không thể xóa được đối tượng đã chọn vì có chứa đối tượng khác!', 'Delete Error!');
						return false;
					}
					if (m > 0){
						jAlert('Không thể xóa được đối tượng đã chọn vì có chứa bài giảng!','Delete Error');
						return false;
					}
					var arrListId = ListId.split(',');
					for (var i = 0; i < arrListId.length; i++) {
						$('li#'+arrListId[i]).remove();
					};
					 $("#TrainingTree").jstree("refresh"); 
					successProcess();
				}
			});		
		}
	});
}
/*
* Author: Tuanpm
* Date:03/01/2013
* Idea: Phuong thuc tim kiem
*/
Tree.prototype.adv_search=function(a){
	var searchNodes = $('#searchNodes').val();
	var url = this.urlPath + '/loadtree';
	var data = {searchNodes : searchNodes, sType: $('#sType').val()}
	if(searchNodes != ''){
		if(a == 'true'){
			$.ajax({
				url:url,
				type:"POST",
				data:data,
				dataType: "json",	
				// cache:true,
				success: function(arrDataTree){
					$('#searchNodebtn').attr('load',false);
					// var searchNodes = $('#searchNodes').val();
					var arrParamTree  = ['PK_OBJECT','FK_OBJECT','TR04','C_HAVE_CHILDREN'];
					$('#TrainingTree').html(myTree.creatTree(arrDataTree, arrParamTree));	
					myTree.genTreeSearch($('#TrainingTree'));
				}
			});
		}
		else  $("#TrainingTree").jstree("refresh");
	} $('#searchNodes').focus(); 
}

/*
* Author: Tuanpm
* Date:03/01/2013
* Idea: Tao lai cau truc tree phuc vu cho search
*/
Tree.prototype.genTreeSearch = function(){
	// var url = this.urlPath + '/searchtraining';
	obj = $("#TrainingTree");
	obj.jstree({ 
		"plugins" : [ 
			"themes","json_data","ui","crrm","dnd","search","types","hotkeys","checkbox","adv_search", "html_data","contextmenu"  
		],
		contextmenu: {items: customMenu},
	 	"themes" : {
	            "theme" : "default",
	            "dots" : false,
	            "icons" : true,
	            "url": baseUrl + '/public/efy-js/jsTree/themes/default/style.css'
	    		},
	})
	.bind("loaded.jstree", function (event, data) {
		 $("#searchNodebtn").click(function () {
		 	$( "#TrainingTree").jstree('close_all', -1);
		 	$("#TrainingTree").jstree("search", $('#searchNodes').val());
		 	 $("#TrainingTree").jstree("refresh");
		});
		 document.onkeydown =function(e){
			if(e.which == 13){
				$( "#TrainingTree").jstree('close_all', -1);
				$("#TrainingTree").jstree("search", $('#searchNodes').val());
		 	 	$("#TrainingTree").jstree("refresh");
			}
		};
		$("#searchNodebtn").trigger('click');
		$("#searchNodebtn").trigger(e);
	})
	.bind('check_node.jstree', function (e, data) {
            var idCheckboxs = data.rslt.obj.attr("id");
            var listID =  $('#idCheckboxs').val();
            listID += data.rslt.obj.attr("id") + ',';
            $('#idCheckboxs').val(listID);
        })
	.bind('uncheck_node.jstree', function (e, data) {
		var listID =  $('#idCheckboxs').val();
		listID = listID.replace(data.rslt.obj.attr("id") + ',', '' );
        $('#idCheckboxs').val(listID);
    })
	.bind("select_node.jstree", function (event, data) { 
			$('#selectValueTrainingTree').val(data.rslt.obj.attr("id"));
			objcurent = data.rslt.obj;
			// objParent = data.inst._get_parent(data.rslt.obj);
			//get NodeName
			objNode = data.inst._get_node(data.rslt.obj.attr("id"));
			resulter = data.inst._get_node(data.rslt.obj);
            obj.jstree("toggle_node", data.rslt.obj);  
		})
	.delegate("a.jstree-clicked", "click", function (event, data) { 
			event.preventDefault(); 
		})
	.delegate("a","dblclick", function(e) { 
			var idn = $(this).parent().attr("id");
			$('input.demo').click(function(){
				myTree.edit();
			});
		});

}
/*
* Author: Tuanpm
* Date:03/01/2013
* Idea: Phuong thuc tao tree bang html (tao toan bo cau truc tree)
*/
Tree.prototype.creatTree = function(data, param){
	var arrParent = [];
	var lenData   = data.length;
	var htmlOut   = '<ul>'
	var parentTem = '';
	for(var i = 0; i < lenData; i++){	
		parentTem = data[i][param[1]];
		if(arrParent != '')
			for(var j = (arrParent.length - 1); j >= 0; j--)
				if(parentTem != arrParent[j]){	
					arrParent.splice(j,1);	
					htmlOut += '</ul></li>';	
				}else	break;
		htmlOut += '<li id = "'+data[i][param[0]]+'">'+ '<a href="#">'+data[i][param[2]]+'</a>';
		if(data[i][param[3]] == 1){
			arrParent.push(data[i][param[0]]);
			htmlOut += '<ul>';	
		}	
	}	
	return htmlOut;
}